/**
 * Copyright (C), 2001-2031, www.bosssof.com.cn
 * FileName: AuthorizationInterceptor.java
 * Author: YuXingZh
 * Date: 4/6/2024 下午11:38
 * Description:
 * 权限（token）验证
 * History:
 * Date          Author   Version  Desc
 * 2024-01-01    bosssoft  1.0.0   initialize this file
 */
package com.bosssoft.g1.component;

import cn.hutool.core.util.StrUtil;
import com.bosssoft.g1.common.exception.code.BizCodeEnum;
import com.bosssoft.g1.common.exception.parse.AppException;
import com.bosssoft.g1.annotation.UserCheck;
import com.bosssoft.g1.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;

/**
 * @className: AuthorizationInterceptor
 * @description: 解决什么问题：
 * 演示线程池的正确使用
 * 主要方法和数据成员：
 * methodxx 使用 ThreadPoolExecutor创建线程进行任务操作
 * 注意事项：
 * 例如：该类需要从容器获取不可以new
 * @author: YuXingZh
 * @date: 4/6/2024下午11:38
 * @since 1.0
 **/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
//
//    @Autowired
//    private UserService userService;
//
//    public final static String USER_KEY = "userId";
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        UserCheck annotation;
//        // 如果处理对象是一个处理方法，则获取到方法上的注解
//        if (handler instanceof HandlerMethod) {
//            annotation = ((HandlerMethod)handler).getMethodAnnotation(UserCheck.class);
//            // 否则直接放过拦截的请求
//        } else {
//            return true;
//        }
//        // 说明此方法没有Login注解
//        if (annotation == null) {
//            return true;
//        }
//
//        // 从请求头获取token
//        String token = request.getHeader("token");
//
//        // 如果请求头没有token,则从请求参数中取
//        if (StrUtil.isBlank(token)) {
//            token = request.getParameter("token");
//        }
//        // 如果还是没有token,则抛异常
//        if (StrUtil.isBlank(token)) {
//            throw new AppException(BizCodeEnum.VALID_EXCEPTION.getMsg());
//        }
//
//        // 查询token信息
//        User tokenEntity = userService.queryByToken(token);
//
//        // 如果token信息是否为null或是否过期，则抛异常
//        if (tokenEntity == null || tokenEntity.getExpireTime().isBefore(LocalDateTime.now())) {
//            throw new XDException(ResultType.TOKEN_EXPIRE);
//        }
//
//        // 否则，存入request作用域,后续根据userId，获取用户信息
//        request.setAttribute(USER_KEY, tokenEntity.getUserId());
//
//        return true;
//    }
}